/*
 * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
 *
 * https://www.mall4j.com/
 *
 * 未经允许，不可做商业用途！
 *
 * 版权所有，侵权必究！
 */

package com.yami.shop.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yami.shop.bean.model.FaceDesignOrder;
import com.yami.shop.bean.param.FaceDesignOrderParam;
import com.yami.shop.common.util.PageAdapter;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 人脸设计订单Mapper接口
 *
 * @author AI Assistant
 */
public interface FaceDesignOrderMapper extends BaseMapper<FaceDesignOrder> {

    /**
     * 根据订单编号获取订单
     * @param orderNumber 订单编号
     * @return 订单信息
     */
    FaceDesignOrder getOrderByOrderNumber(@Param("orderNumber") String orderNumber);

    /**
     * 根据用户ID和订单状态获取订单列表
     * @param adapter 分页参数
     * @param userId 用户ID
     * @param status 订单状态
     * @return 订单列表
     */
    List<FaceDesignOrder> listByUserIdAndStatus(@Param("adapter") PageAdapter adapter, 
                                               @Param("userId") String userId, 
                                               @Param("status") Integer status);

    /**
     * 根据用户ID和订单状态获取订单数量
     * @param userId 用户ID
     * @param status 订单状态
     * @return 订单数量
     */
    Long countByUserIdAndStatus(@Param("userId") String userId, @Param("status") Integer status);

    /**
     * 根据订单参数获取订单列表
     * @param adapter 分页参数
     * @param orderParam 订单参数
     * @return 订单列表
     */
    List<FaceDesignOrder> listByOrderParam(@Param("adapter") PageAdapter adapter, 
                                           @Param("orderParam") FaceDesignOrderParam orderParam);

    /**
     * 根据订单参数获取订单数量
     * @param orderParam 订单参数
     * @return 订单数量
     */
    Long countByOrderParam(@Param("orderParam") FaceDesignOrderParam orderParam);

    /**
     * 更新订单支付状态
     * @param orderNumber 订单编号
     * @param payStatus 支付状态
     * @param payType 支付方式
     */
    void updatePayStatus(@Param("orderNumber") String orderNumber, 
                        @Param("payStatus") Integer payStatus, 
                        @Param("payType") Integer payType);

    /**
     * 更新订单状态
     * @param orderNumber 订单编号
     * @param status 订单状态
     */
    void updateStatus(@Param("orderNumber") String orderNumber, @Param("status") Integer status);

    /**
     * 根据设计稿ID获取订单
     * @param designId 设计稿ID
     * @return 订单信息
     */
    FaceDesignOrder getByDesignId(@Param("designId") Long designId);

    /**
     * 根据草稿ID获取订单
     * @param draftId 草稿ID
     * @return 订单信息
     */
    FaceDesignOrder getByDraftId(@Param("draftId") Long draftId);

    /**
     * 获取待处理的订单数量（用于管理端统计）
     * @return 待处理订单数量
     */
    Long countPendingOrders();

    /**
     * 获取今日订单统计
     * @return 今日订单统计信息
     */
    List<FaceDesignOrder> getTodayOrderStatistics();
}